<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <script>

        // // // 1. 两数之和
        // function getTwoNumSum (num1, num2) {
        //     // if (num2 === undefined) {
        //     //     num2 = 1;
        //     // }
        //     num2 = num2 === undefined ? 1 : num2;
        //     var sum = num1 + num2;
        //     return sum;
        // }

        // console.log(getTwoNumSum(1, 1)); // 2

        // // // es6函数默认值
        // // function getTwoNumSum (num1, num2 = 1) {
        // //     var sum = num1 + num2;
        // //     console.log(sum);
        // // }

        // getTwoNumSum(1, 0); // 2

        // // 2. 两数之间的和
        // function getSum (start, end) {
        //     var sum = 0;
        //     for (var i = start; i <= end; i++) {
        //         sum += i;
        //     }
        //     console.log(sum);
        // }

        // getTwoNumSum(1, 1); // 2
        // getTwoNumSum(10, 10); // 20

        // getSum(1, 4); // 10
        // getSum(1, 2); // 3

        // 1. 只运行的函数
        // function fn () {
        //     console.log(666);
        // }

        // // 2. 运行 + 返回结果的函数
        // function fn () {
        //     return 666;
        // }

        // // var num = fn();

        // console.log(fn);

        // // 找words数组中有没有字母数大于100的 有返回true 没有的话返回false
        // var words = ['icon', 'inline', 'font', 'inline', 'navigator', 'auto', 'font', 'inline', 'block', 'count', 'transform', 'translate'];

        // // 找xxx的逻辑
        // function some (arr) {
        //     for (var i = 0; i < arr.length; i++) {
        //         if (arr[i].length >= 9) {
        //             return true;
        //         }
        //     }
        //     return false;
        // }

        // console.log(some(words)); // false


        // // 找words数组中有没有字母数大于8的 有返回第一个找到的单词 没有的话返回null
        // function find (arr) {
        //     for (var i = 0; i < arr.length; i++) {
        //         if (arr[i].length >= 9) {
        //             return arr[i];
        //         }
        //     }
        //     return null;
        // }

        // 求数组最大值
        // 数组的命名: num >> nums/numList   word >> words/wordList
        // function getMax (nums) {
        //     var max = -Infinity;
        //     for (var i = 0; i < nums.length; i++) {
        //         var num = nums[i];
        //         if (num > max) {
        //             max = num;
        //         }
        //     }
        //     return max;
        // }

        // console.log(getMax([1, 2, 3])); // 3
        // console.log(getMax([1, 11, 3])); // 11
        // console.log(getMax([1, 11, 311, 2])); // 311
        // console.log(getMax([-1, -11, -3, -999])); // -1

        // 求2的2次方，2的8次方  3的3次方  4的5次方 5的20次方
        // 2 * 2
        // 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2
        // 3 * 3 * 3
        // function power (x, y) {
        //     var result = 1;
        //     for (var i = 0; i < y; i++) {
        //         result *= x;
        //     }
        //     return result;
        // }

        // console.log(power(2, 8)); // 256
        // console.log(power(2, 10)); // 1024
        // console.log(power(2, 4)); // 16
        // console.log(power(3, 3)); // 27
        // console.log(power(5, 20)); // ??

        function fn() {
            // 伪数组
            for (var i = 0; i < arguments.length; i++) {
                console.log(arguments[i]);
            }
        }

        getSum(1, 2, 3); // 6
        getSum(1, 2, 3, 4); // 10
        getSum(1, 2, 3, 4, 5); // 15
        getSum(); // 0

        getWord('h', 'e', 'l', 'l', 'o'); // 'hello'
        getWord('w', 'o', 'r', 'l', 'd'); // 'world'

        // 求和
        function getSum() {
            var sum = 0;
            for (var i = 0; i < arguments.length; i++) {
                sum += arguments[i];
            }
            return sum;
        }

        // 拼接单词
        function getWord() {
            var result = '';
            for (var i = 0; i < arguments.length; i++) {
                result += arguments[i];
            }
            return result;
        }

        const arr = [
            { finishDate: "", levelId: "1", nodeFormworkId: "inst_settle", nodeName: "机构入驻", nodeStatus: "process" },
            { finishDate: "", levelId: "2", nodeFormworkId: "inst_account", nodeName: "账号确认", nodeStatus: "init" },
            { finishDate: "", levelId: "3", nodeFormworkId: "inst_sign_plan", nodeName: "签约方案确认", nodeStatus: "init" },
            { finishDate: "", levelId: "4-1-1", nodeFormworkId: "inst_agreement_collect", nodeName: "合同要素准备", nodeStatus: "init" },
            { finishDate: "", levelId: "4-1-2", nodeFormworkId: "inst_agreement_consult", nodeName: "合同要素磋商", nodeStatus: "init" },
            { finishDate: "", levelId: "4-1-3", nodeFormworkId: "inst_sign", nodeName: "机构签约", nodeStatus: "init" },
            { finishDate: "", levelId: "4-2-1", nodeFormworkId: "inst_risk_allow", nodeName: "风险准入", nodeStatus: "init" },
            { finishDate: "", levelId: "5", nodeFormworkId: "", nodeName: "完成", nodeStatus: "init" }
        ];
        const mockData = {
            finishDate: 1616503154000,
            node: '机构入驻',
            type: 'Start',
            units: [],
            next: {
                finishDate: 1616503694000,
                node: '账号确认',
                type: 'UserTask',
                units: [],
                next: {
                    finishDate: 1616503694000,
                    node: '签约方案确认',
                    type: 'UserTask',
                    units: [],
                    next: {
                        subSteps: [
                            {
                                finishDate: null,
                                node: '合同要素准备',
                                type: '',
                                units: [],
                                next: {
                                    finishDate: 1616503154000,
                                    node: '合同要素磋商',
                                    type: '',
                                    units: [],
                                    next: {
                                        finishDate: 1616503154000,
                                        node: '机构签约',
                                        type: '',
                                        units: [],
                                    }
                                }
                            },
                            {
                                finishDate: null,
                                node: '风险准入',
                                type: '',
                                units: [],
                            },
                        ],
                        next: {
                            finishDate: 1516503694000,
                            node: '完成',
                            type: '',
                            units: [],
                        }
                    }
                },
            }
        };


        function transformNode (originNode) {
            return {
                levelId: originNode.levelId,
                finishDate: originNode.finishDate,
                node: originNode.nodeName,
                type: '???',
                units: [],
                subSteps: [],
                next: {

                },
            };
        }

        function arr2mockData (arr) {

            if (!arr.length) {
                return {};
            }

            const treeNode = transformNode(arr.shift());
            let currentTreeNode = treeNode;

            while (arr.length > 0) {
                const nextTreeNode = transformNode(arr.shift());
                if (!nextTreeNode.levelId.includes('-')) {
                    currentTreeNode.next = nextTreeNode;
                    currentTreeNode = nextTreeNode;
                } else {
                    currentTreeNode.next = {
                        subSteps
                    };
                    currentTreeNode.subSteps.push(nextTreeNode);
                }
            }
            return treeNode;
        }

        console.log(arr2mockData(arr));



            // // wo
            // function isLeapYear (year) {
            //     return year % 4 === 0;
            // }

            // // 得到2月份天数
            // function getFebDayCount (year) {
            //     if (isLeapYear(year)) {
            //         return 29;
            //     }
            //     return 28;
            // }

            // var arr = [
            //     [2, 3, 4],
            //     [1, 2],
            //     [4, 5, 6],
            //     [1, 2, 3],
            // ];



    </script>
</body>

</html>